Skip to main content

Git Remote Repository

Table of Contents

介绍

远程仓库是托管在网上的项目版本库, 需要在代码平台上创建, 常见的如

可以通过两种方式添加远程仓库

 $ git clone <Repository url>                    # 克隆远端仓库到本地, 自动绑定链接对应的仓库

$ git remote -v # 查看本地仓库关联的所有远端仓库
> origin git@github.com:John/Learning.git (fetch)
> origin git@github.com:John/Learning.git (push)

$ git remote add origin <Repository url> # 将远程仓库命名为 origin 并关联本地仓库
  • 一个本地仓库可以关联多个远程仓库
  • 本地仓库可以提交代码到任意一个已关联的远程仓库
  • 使用克隆后, 该远程仓库默认被命名为 origin

.gitignore

忽略指定文件, 不对其追踪和提交, 文件名固定为 .gitignore, 项目内可创建多个

 $ cat .gitignore
> *.pyc # 忽略当前项目内所有 .pyc 结尾的文件
> !main.pyc # 强制跟踪所有 main.pyc
> /*.log # 忽略当前目录下 .log 结尾文件, 不影响上层的文件
> temp/ # 忽略整个项目内所有 temp 文件夹
> /lib/*.pyc # 忽略当前 lib 目录 下一级的 pyc 文件, lib 下多层目录不受影响
> lib/**/.pyc # 忽略项目内所有 lib 文件夹内的 pyc 文件

$ git check-ignore -v <file> # 验证 igtignore 忽略文件或者路径

$ git check-ignore -v log/report.log
> .gitignore:4:log/* log/report.log

$ git check-ignore -v utils/__pycache__/
> .gitignore:2:__pycache__ utils/__pycache__/

SSH key 密钥

本地仓库推送代码到远端时, git 会要求用户输入用户名和密码, 设置 ssh key 即可免密码推送

生成密钥

密钥linuxwindows
id_rsa (私钥)/root/.ssh/id_rsaC:\Users\<user>\.ssh
id_rsa.pub (公钥)/root/.ssh/id_rsa.pubC:\Users\<user>\.ssh

生成两个密钥文件, 将公钥放到代码托管平台的账号设置中

 $ ssh-keygen                                    # 自动生成密钥
$ ssh-keygen -t rsa -C "key message" # 生成 rsa 类型带 key 注释信息的密钥

$ cat ~/.ssh/id_rsa.pub # 公钥以 ssh-rsa 开头, 注释信息结尾
> ssh-rsa xxx....xxx key message
  • 密钥由系统生成, 放入用户设置, 所以是系统和账户绑定
  • 系统下的本地仓库推送代码到该账户使用 ssh 链接时即可免密

Github 令牌

2021 年 8 月 13 号, GitHub 不再使用密码验证, 改用令牌验证
Github 账户 -> Settings -> Developer Settings -> Personal access tokens
注意: 创建令牌时需勾选令牌可用权限, 如可读, 可写的权限

 # 使用 ssh 连接携带令牌可以直接下载
$ git clone https://{token}@github/{username}/{repo}.git

# 已有仓库添加令牌
$ git remote set-url origin https://{token}@github.com/{username}/{repo}.git

# 查看关联远端仓库(附带令牌)
$ git remote -v
> origin https://{token}@github.com/{username}/{repo}.git (fetch)
> origin https://{token}@github.com/{username}/{repo}.git (push)

Error Resolve

$ git status
error: object file .git/objects/f7/01097c53f5db20f18fa5edae4003c8bf9184ff is empty
error: object file .git/objects/f7/01097c53f5db20f18fa5edae4003c8bf9184ff is empty
fatal: loose object f701097c53f5db20f18fa5edae4003c8bf9184ff (stored in .git/objects/f7/01097c53f5db20f18fa5edae4003c8bf9184ff) is corrupt

# 删除 .git 本地仓库中的空文件, 重新拉取
$ find .git/objects/ -size 0 -exec rm -f {} \;
$ git fetch origin